Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The rewrite rules of
Data.ByteString.break
are currently quite fragile (see GHC #11688 and #70) as they match on the(==)
class method. Class methods call-sites at known types are subject to GHC-generated "Class Op" rewrite rules, which rewrite the call-site to a call directly to the appropriate instance's implementation. These rules fire rather early in simplification and therefore defeatbytestring
'sbreak
rule.The usual solution here is to give each particular instance's implementation of
(==)
a name which can be specifically matched (e.g.Int
's(==)
is defined in terms ofGHC.Classes.eqInt
). Unfortunately, such names were previously not available forWord8
. This will be fixed in GHC 8.0 (as of D1980). This branch rewrites thebreak
rules to match on these new functions, which should make them far more robust.The second patch is merely a whitespace cleanup.